package com.android.test

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.Lifecycle

/**
 * MainActivity是ComponentActivity的子类，
 * 而ComponentActivity实现了LifecycleOwner接口，重写了getLifecycle() 方法返回一个 Lifecycle 对象。
 *
 * androidx.lifecycle 的实现巧妙地利用了观察者模式和状态模式。
 * 注册观察者： 当你调用 lifecycle.addObserver(observer) 时，Lifecycle 类（具体实现是 LifecycleRegistry）会将这个观察者加入自己的观察者列表中。
 * 状态分发： ComponentActivity 在其生命周期的关键节点（如 onCreate, onStart, onResume）会调用 LifecycleRegistry 的对应方法（如 handleLifecycleEvent(Lifecycle.Event.ON_CREATE)）。
 * 事件与状态转换： LifecycleRegistry 接收到一个事件（Event）后，会根据预定义的状态机（State Machine）规则，计算出新的生命周期状态（State）。
 * State (状态): INITIALIZED, CREATED, STARTED, RESUMED, DESTROYED。表示生命周期所处的稳定阶段。
 * Event (事件): ON_CREATE, ON_START, ON_RESUME, ON_PAUSE, ON_STOP, ON_DESTROY。表示触发状态变化的行为。
 * 通知观察者： 当状态发生变化后，LifecycleRegistry 会遍历所有已注册的观察者，并将最新的状态（或事件）分发给它们。对于 DefaultLifecycleObserver，它会调用与当前事件对应的方法（如分发 ON_START 事件时会调用 onStart 方法）。
 * 简单流程：
 * Activity.onCreate() -> LifecycleRegistry.handleLifecycleEvent(ON_CREATE) -> (状态机计算，状态变为 CREATED) -> 通知所有观察者 ON_CREATE 事件发生 -> DefaultLifecycleObserver.onCreate() 被调用。
 *
 */
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_main)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
    }

    /**
     *实现了LifecycleOwner接口返回lifecycle实例对象、
     */
    override val lifecycle: Lifecycle
        get() = super.lifecycle
}